package com.core.dao.builder;

import cn.hutool.core.date.DateUtil;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 简单插入SQL拼装对象
 */
public class InsertBuilder extends ABuilder {
    //表名称
    private String tableName;
    //属性列表
    private List<String> columnList = new ArrayList<>();
    //值列表
    private List<String> objectList = new ArrayList<>();

    /**
     * 构造
     *
     * @param tableName
     */
    public InsertBuilder(String tableName) {
        this.tableName = tableName;
    }

    /**
     * 字段（字符串）
     *
     * @param column
     * @param param
     * @return
     */
    public InsertBuilder append(String column, String param) {
        if (column != null && column.length() > 0) {
            columnList.add(column);
            if (param == null || param.trim().length() <= 0) {
                objectList.add("null");
            } else {
                objectList.add("'" + param + "'");
            }
        }
        return this;
    }

    /**
     * 字段（日期时间）
     *
     * @param column
     * @param param
     * @return
     */
    public InsertBuilder append(String column, Date param) {
        if (column != null && column.length() > 0) {
            columnList.add(column);
            if (param == null) {
                objectList.add("null");
            } else {
                objectList.add("'" + DateUtil.formatDateTime(param) + "'");
            }
        }
        return this;
    }


    /**
     * 字段（日期时间）
     *
     * @param column
     * @param param
     * @return
     */
    public InsertBuilder appendDatetime(String column, String param) {
        if (column != null && column.length() > 0) {
            columnList.add(column);
            if (param == null || param.trim().length() <= 0) {
                objectList.add("null");
            } else {

                objectList.add("'" + DateUtil.formatDateTime(DateUtil.parse(param.trim())) + "'");
            }
        }
        return this;
    }

    /**
     * 字段（数字）
     *
     * @param column
     * @param param
     * @return
     */
    public InsertBuilder append(String column, Number param) {
        if (column != null && column.length() > 0) {
            columnList.add(column);
            if (param == null) {
                objectList.add("null");
            } else {
                objectList.add(param.toString());
            }
        }
        return this;
    }

    /**
     * 字段（数字）
     *
     * @param column
     * @param param
     * @return
     */
    public InsertBuilder appendNumber(String column, String param) {
        if (column != null && column.length() > 0) {
            columnList.add(column);
            if (param == null || param.trim().length() <= 0) {
                objectList.add("null");
            } else {
                objectList.add(param.trim());
            }
        }
        return this;
    }

    /**
     * 构造SQL
     *
     * @return
     */
    public String toString() {
        StringBuilder s = new StringBuilder();
        s.append(" INSERT INTO ").append(tableName).append("(");
        for (int i = 0; i < columnList.size(); i++) {
            if (i > 0) {
                s.append(",");
            }
            s.append(columnList.get(i));
        }
        s.append(") VALUES (");
        for (int i = 0; i < objectList.size(); i++) {
            if (i > 0) {
                s.append(",");
            }
            s.append(objectList.get(i));
        }
        s.append(")");
        return s.toString();
    }
}
